package com.bestcem.xm.user.dao;

import com.bestcem.xm.user.entity.pojo.UserSmtpDO;

import java.util.List;

/**
 * 邮箱配置信息表
 *
 * @author qiongyu.cui <qiongyu.cui@idiaoyan.com>
 * @version v1.0
 * @date 2022/3/16 11:16
 */
public interface UserSmtpDao {

    /**
     * 新增邮箱配置信息
     *
     * @param userSmtpDO 邮箱配置信息
     * @return java.lang.Integer 主键id
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:23
     */
    String insert(UserSmtpDO userSmtpDO);

    /**
     * 有选择想的新增邮箱配置信息，为空则不插入
     *
     * @param userSmtpDO 邮箱配置信息
     * @return java.lang.Integer 主键id
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:24
     */
    String insertSelective(UserSmtpDO userSmtpDO);

    /**
     * 根据组件id查询邮箱配置
     *
     * @param smtpId 邮箱配置id
     * @return com.bestcem.xm.user.entity.pojo.UserSmtpDO
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:24
     */
    UserSmtpDO selectById(String smtpId);

    /**
     * 根据主键有选择的做更新
     *
     * @param userSmtpDO 邮箱配置信息
     * @return java.lang.Integer 更新成功的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:24
     */
    Integer updateSelectiveById(UserSmtpDO userSmtpDO);

    /**
     * 根据公司id有选择的做更新
     *
     * @param userSmtpDO
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 20:39
     */
    Integer updateSelectiveByOrgId(UserSmtpDO userSmtpDO);

    /**
     * 根据主键和公司id有选择的做更新
     *
     * @param smtpId     邮箱配置id
     * @param orgId      公司id
     * @param userSmtpDO 邮箱配置信息
     * @return java.lang.Integer
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:55
     */
    Integer updateSelectiveByIdAndOrgId(String smtpId, String orgId, UserSmtpDO userSmtpDO);

    /**
     * 根据相关参数查询邮箱配置信息
     *
     * @param userSmtpDO 邮箱配置信息相关查询参数
     * @return java.util.List<com.bestcem.xm.user.entity.pojo.UserSmtpDO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:43
     */
    List<UserSmtpDO> selectBySelective(UserSmtpDO userSmtpDO);

    /**
     * 根据ids批量删除
     *
     * @param ids
     * @param orgId
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 20:36
     */
    Integer deleteByIds(List<String> ids, String orgId);

    /**
     * 可选条件删除
     *
     * @param smtpDO 条件
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/21 20:10
     */
    Integer deleteBySelective(UserSmtpDO smtpDO);

    /**
     * 查询指定公司下指定验证状态的邮箱配置列表
     *
     * @param orgId          公司id
     * @param validateStatus 状态列表
     * @return java.lang.Long
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/18 14:57
     */
    Long count(String orgId, List<Integer> validateStatus);

    /**
     * 分页查询邮箱配置信息
     *
     * @param page           第几页
     * @param size           每页大小
     * @param descending     升序还是降序
     * @param sortBy         排序字段
     * @param orgId          公司id
     * @param validateStatus 验证状态列表
     * @return java.util.List<com.bestcem.xm.user.entity.pojo.UserSmtpDO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/18 15:14
     */
    List<UserSmtpDO> listByPage(Integer page, Integer size, Boolean descending, String sortBy, String orgId, List<Integer> validateStatus);

}
